Python Virtual Environments
Wozu brauche ich das?
Um für jedes Python Projekt die richtigen Python-Pakete in der richtigen Version zu haben, außerdem die passende Python Version (openai 0.28.1 funktioniert mit Python 3.11.6 aber nicht mit Python 3.12).
Python Virtual Environments sind der Versuch, der Dependency Hell zu entkommen - zumindest für Python.
Wie funktioniert das?
-
Jedes Virtual Environment ist ein Ordner, in den die Pakete installiert werden. Das Virtual Environment nutzt genau eine Python-Version von den im Betriebssystem installierten Python-Versionen. Der Ordner kann beliebig heissen, oft wird er
.venv
genannt. -
Wird der Paketmanager
pip
im Virtual Environment verwendet, so werden die Pakete in den Ordner des Virtual Environments installiert. Damit ist diese Python Umgebung unabhängig von den anderen Python virtuellen Umgebungen und unabhängig von den Python Installationen des Betriebssystems. -
Um ein Virtual Environment zu erstellen, wird das Python Modul
venv
verwendet. Dieses Modul ist in Python 3.3 und neuer enthalten. Das Modul erstellt den Ordner des Virtual Environments und kopiert oder symlinkt die gewünschte Python Installation in den Ordner. Das Modulvenv
kann mitpython3 -m venv
ausgeführt werden. -
Soll die virtuelle Umgebung auf eine andere Python Installation als
python3
zeigen, so ruft man das Modul mit dem gewünschten Python auf, z.B.python3.12 -m venv
. -
Um ein Virtual Environment zu aktivieren, muss ein Skript ausgeführt werden, das sich im Ordner des Virtual Environments befindet. Dieses Skript setzt die Umgebungsvariablen
PATH
undPYTHONPATH
so, dass die Python Installation und die Pakete des Virtual Environments verwendet werden. Das Skript heisstactivate
und befindet sich im Ordner.venv/bin
. Das Skript muss ausgeführt werden, bevor Python oderpip
verwendet werden. Das Skript kann mitdeactivate
wieder deaktiviert werden. -
Python Virtual Environments sind abhängig von der oder den Python Installationen des Betriebssystems. Es nicht kopierbar auf einen anderen Computer. Um ein Virtual Environment auf einem anderen Computer zu verwenden, muss es auf dem anderen Computer neu erstellt werden. Der Ordner wird daher bei Git ignoriert.
-
Um ein Virtual Environment zu löschen, muss einfach der Ordner gelöscht werden.
echo ".venv" > .gitignore
python3 -m venv .venv
source .venv/bin/activate # Mind the prompt change.
Innerhalb der virtuellen Python Umgebung zeigt which python
auf .env/bin/python
.
Die virtuelle Umgebung kann mit deactivate
wieder verlassen werden und mit rm -rf .venv
ganz gelöscht werden.
VS Code Extensions
Python
Um in VS Code mit Python zu arbeiten braucht man grundsätzlich die Python Extension von Microsoft.
Diese Extension erleichtert das Leben ungemein. Über die Command Palette (Command-Shift-P) kann man u.a.
-
eine virtuelle Python Umgebung einrichten (Python: Create Environment…)
-
eine Python Umgebung - virtuell oder real - einem Ordner zuordnen (Python: Select Interpreter)
VS Code kann sich also zu einem Ordner eine Python Umgebung merken. Das dient dazu, in einem Python-Projekt immer dieselbe Python-Version und immer die dieselben Paket-Versionen zu verwenden.
Z. B. wird bei Run Python File in Terminal (Kontext Menü einer .py Datei) stets die richtige, d.h. die zugeornete Python Umgebung gestartet.
Python Environment Manager
Zur Verwaltung der Virtual Environments in VS Code gibt es den Python Environment Manager von Don Jayamanne.
Diese Extension stellt übersichtlich dar die realen Python Umgebungen und die virtuellen, sowie deren Zuordnung zu Orndnern einen Workspace:
Wie Jupyter Notebooks nutzen?
Jetzt wollen wir noch diese tollen virtuellen Umgebungen in einem Jupyter Notebook verwenden. Dazu braucht man einen Notebook Kernel für die gewünschte Umgebung.
Den Kernel erzeugt man in VS Code sehr bequem mit der Python Extension, siehe oben.
Der so erzeugte Kernel ist unter .venv/share/jupyter/kernels/python3/kernel.json
zu finden.
Weitere Infos zu Jupyter Kernels hier.
How to copy?
How to copy a virtual environment to another computer?
- Auf Computer A innerhalb einer aktivierten virtuellen Python Umgebung:
pip freeze > requirements.txt
- Auf Computer B innerhalb einer aktivierten virtuellen Python Umgebung:
pip install -r requirements.txt